package middlewares

import (
	"context"
	"github.com/cloudwego/hertz/pkg/app"
	"github.com/cloudwego/hertz/pkg/common/hlog"
	"github.com/opentracing/opentracing-go"
	"time"
)

func TracerMiddleware() app.HandlerFunc {
	return func(ctx context.Context, c *app.RequestContext) {
		span := opentracing.StartSpan("Web.Http")
		defer span.Finish()
		openctx := opentracing.ContextWithSpan(ctx, span)

		// 前置逻辑：请求开始时记录时间
		start := time.Now()

		// 调用下一个中间件或业务处理器
		c.Next(openctx)

		// 后置逻辑：请求结束后记录日志
		duration := time.Since(start)
		hlog.CtxInfof(
			openctx,
			"method=%s path=%s status=%d duration=%v",
			c.Request.Method(),      // 请求方法（GET/POST 等）
			c.Request.URI().Path(),  // 请求路径
			c.Response.StatusCode(), // 响应状态码
			duration,                // 处理耗时
		)
	}
}
